Installer Alpine Linux sur un Raspberry PI 4
Objectifs
L'idée est d'avoir sur ce serveur un ensemble de services pour la maison, comme le partage de fichiers, site web de chanson. L'utilisation du Raspberry pi est essentiel ici car l'idée est d'économiser un abonnement chez Google Drive ou Microsoft ou autre service de partage de fichiers. Or le Raspberry pi ne consomme pas beaucoup, ainsi on peut le laisser allumer tout le temps. Par exemple le serveur nextcloud permet d'avoir un espace de stockage accessible depuis n'importe où. Il existe déjà 1 serveur qui tourne en permanence mais il consomme un peu plus, n'a qu'un disque (pas de RAID 1) et il est moins puissant.
Matériels
Le Raspberry Pi 4 8Go est un ordinateur puissant et peu gourmand en ressource.
Pour le stockage, je branche au Raspberry Pi un boitier externe USB supportant le RAID. Chez LDLC le boitier Icy Box IB-RD2243U31 est vendu aux alentours de 50 euros. J'ai acheté 2 disques SSD de 1To , ceux-ci sont utilisés en RAID 1, c'est-à-dire en mode miroir. Il faut choisir le RAID 1 en positionnant les switchs comme indiqué sur le boitier et en restant appuyé sur reset pendant 5 secondes.
Installation d'Alpine Linux
L'installation de cette distribution sur Raspberry Pi va se faire en 2 temps. En effet par défaut ce système est entièrement en RAM (système de fichier compris en lecture seule). A ce jour le script d'installation setup-alpine ne supporte pas l'installation sur disque (sys mode), cette procédure va se faire manuellement ici. L'idée est d'avoir la partition de boot sur la carte SD (1Go), la partition contenant le système de fichier racine "/" sur le SSD (64Go), et enfin une partition qui contiendra toutes les données utilisateurs (documents, musique, backup...), un peu plus de 900Go.
Préparation de la carte Micro SD
Si la carte correspond à /dev/mmcblk0 voici la procédure à suivre
- Executer fdisk
fdisk /dev/mmcblk0
- Appuyer sur "n" pour créer la partition.
- Appuyer sur "p" pour la transformer en partition principale.
- Appuyer sur "1" pour lui donner un numéro dans la table de partition.
- Appuyer sur Entrée pour accepter le secteur de départ par défaut.
- Taper +taille pour choisir la taille. Dans mon cas j'ai besoin de 1go, donc "+1G".
- Après l'avoir créée, appuyer sur "a" pour la rendre bootable.
- En appuyant sur "p" vérifier que la partition est présente
- Maintenant il faut définir le type de la partition. Appuyer sur "t" pour paramétrer le type de partition, appuyer sur "c" pour "W95 FAT32 (LBA)".
- Appuyer sur "w" pour écrire la table de partition et quitter fdisk
- Il faut maintenant formater la partition
mkfs.vfat -F 32 /dev/mmcblk0p1
- Il est possible de donner un nom à cette partition
fatlabel /dev/mmcblk0 BOOT_PI2
Installation
Il faut d'abord télécharger la dernière version d'Alpine Linux. Pour le Raspberry Pi 4 il faut prendre l'architecture aarch64. Le fichier récupéré est une archive prête à être désarchivée sur une carte micro SD préalablement formatée en FAT32 et bootable.
- Téléchargement de la dernière version, le fichier fait environ 90 Mo (c'est pas gros)
wget http://dl-cdn.alpinelinux.org/alpine/v3.12/releases/aarch64/alpine-rpi-3.12.1-aarch64.tar.gz
- Monter la carte SD
mount /dev/mmcblk0p1 SD cd SD
- Désarchiver le contenu sur la carte
tar xvzf ../alpine-rpi-3.12.1-aarch64.tar.gz
- Créer le fichier usercfg.txt pour configurer les paramètres bas niveau du système.
La spécification de ces paramètres est définie sur le site de Raspberry Pi
enable_uart=1 gpu_mem=32 disable_overscan=1
- Démonter la carte
umount /dev/mmcblk0
Paramètrage
Exécuter le script de paramétrage et suivre la procédure
setup-alpine
Une fois terminé mettre à jour le système
apk update apk upgrade
Installer le système de fichier racine sur le SSD
Je vais considérer ici que le SSD correspond au périphérique /dev/sda, vérifier bien au préalable que le RAID 1 est bien sélectionné. Rester appuyé sur le bouton reset de l'Icy Box pour appliquer la sélection, attention cela détruit les données des disques.
- Exécuter fdisk sur le SSD
fdisk /dev/sda
- Créer 2 partitions linux (cf procédure plus haut) une de 64Go l'autre prenant le restant du disque
- Formater les partitions créées en ext4
mkfs.ext4 /dev/sda1 mkfs.ext4 /dev/sda2
- Monter la première partition
mount /dev/sda1 /mnt
- Monter le répetoire boot la carte dans le répertoire /mnt/boot
mkdir /mnt/boot mount /media/mmcblk0p1/boot /mnt/boot
- Exécuter le script permettant de choisir le mode système sur l'emplacement voulu.
Cela a pour effet de préparer (copier) la partition avec le système de fichier racine.
Ignorer les messages d'alertes concernant syslinux et extlinux.
setup-disk -m sys /mnt
- Remonter en écriture la partition de boot (la carte SD)
mount -o remount,rw /media/mmcblk0p1
- créér le répertoire
mkdir /mnt/media/mmcblk0p1
- Editer les points de montage dans /mnt/etc/fstab
/dev/mmcblk0p1 /media/mmcblk0p1 vfat defaults 0 0 /media/mmcblk0p1/boot /boot none defaults,bind 0 0
- Mettre une option au démarrage du noyau pour lui donner l'emplacement du sytème de fichier racine,
en rajoutant root=/dev/sda1 dans le fichier /media/mmcblk0p1/cmdline.txt
root=/dev/sda1 modules=sd-mod,usb-storage,ext4 quiet rootfstype=ext4
- Ou recopier le contenu du fichier /media/mmcblk0p1/boot/cmdline.txt dans /media/mmcblk0p1/cmdline.txt
- Le système est prêt à être rebooté :-)
Après avoir installé avahi daemon et dbus requis pas ce premis, le système semble prend que 36Mo en mémoire.
pi2:~# free total used free shared buff/cache available Mem: 8003968 36168 7926596 188 41204 7876272 Swap: 0 0 0
Pour la température Du raspberry pi il a fallu que je change de boitier pour mieux refroidir celui-ci flirc. Celui-ci est un boitier en aluminium qiu refroidit le raspberry pi passivement.
La température semble correcte maintenant ~43°C, en le laissant allumé toute une nuit (sans rien faire). Malheureusement, je n'ai pas la mesure d'avant avec le boitier en plastique, mais ça devait être bien plus vue la température du boitier
pi2:~# cat /sys/class/thermal/thermal_zone0/temp 42842
Documentation des commandes apk: https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management
Installation de java
apk add openjdk8-jre
Mise à jour du du bootloader
git clone https://github.com/raspberrypi/rpi-eeprom.git apk add raspberrypi cd rpi-eeprom export PATH=$PATH:/opt/vc/bin/:. ./rpi-eeprom-update -a -d
Sources
- https://wiki.alpinelinux.org/wiki/Raspberry_Pi_4_-_Persistent_system_acting_as_a_NAS_and_Time_Machine
- https://www.stephenwagner.com/2020/03/21/create-boot-partition-layout-raspberry-pi/